The Universal Serial Bus or “USB” is a well-known standard for serial communications. There have been several iterations of the USB standard, most recently the Universal Serial Bus 3.0 Specification published on Nov. 12, 2008. The USB standard connects one or more USB “devices” with a USB “host.” Devices are either “hubs” or “functions.” Hubs are used to connect multiple devices. Functions, sometimes referred to as “USB-compliant devices” or simply “devices,” are typically computer peripherals such as keyboards or storage devices.
The USB standard specifies a master-slave bus architecture. The host serves as master and the devices serve as slaves. Devices can communicate with the host only when permitted to do so by the host. A host also provides power to a device if necessary. Communication between the host and devices is based on logical channels known as endpoints. Endpoints for data are unidirectional. A special endpoint used for messages is bidirectional.
Before a device can communicate with the host, it must be configured by the host through a process known as “enumeration.” Enumeration begins by the host sending a reset signal to the device. The device in turn provides configuration information in the form of one or more descriptors. Descriptors contain information in a defined format that reveals to the host the manufacturer, product and other information about the device. The host then loads necessary device drivers or other software to permit it to use the function rendered by the device.